package com.xinchao.ck_mips.model;

import com.xinchao.ck_mips.bean.ConfigBean;
import com.xinchao.ck_mips.bean.DeviceInfoBean;
import com.xinchao.ck_mips.bean.NewestProgramBean;
import com.xinchao.ck_mips.bean.UpgradeBean;

import java.util.List;

/**
 * Created by wq on 2019/5/6.
 */
public interface IPlayModel extends BaseModel {

    /**
     * 轮询获取最新信息
     *
     * @param hours      联系工作时间
     * @param ip         内网ip
     * @param rebootTime 终端最近一次开机时间
     * @param mListener
     */
    void report(int hours, String ip, long rebootTime, IReportCallbackListener mListener);

    /**
     * 获取服务端最新终端信息
     *
     * @param mListener
     */
    void getNewestSetting(ISettingCallbackListener mListener);

    /**
     * 获取终端最新升级信息
     *
     * @param mListener
     */
    void getUpgrade(IUpgradeCallbackListener mListener);

    /**
     * 反馈终端最新设置信息
     *
     * @param number    批次号
     * @param mListener
     */
    void getNewestSettingReply(String number, INewestSettingReplyCallbackListener mListener);

    /**
     * 获取终端升级信息后，反馈
     *
     * @param number    批次号
     * @param mListener
     */
    void getUpgradeReply(String number, IUpgradeReplyCallbackListener mListener);

    /**
     * 终端音量改变，同步服务端
     *
     * @param volume    当前终端音量值
     * @param mListener
     */
    void settingSync(int volume, ISettingSyncCallbackListener mListener);

    /**
     * 获取最新节目信息
     *
     * @param capacity  终端剩余容量（单位字节）
     * @param mListener
     */
    void getNewestProgram(long capacity, IProgramCallbackListener mListener);

    /**
     * 获取最新节目信息后反馈
     *
     * @param serialNo  批次号可以为空
     * @param mListener
     */
    void getNewestProgramReply(String serialNo, IProgramReplyCallbackListener mListener);

    /**
     * @param uploadTime 上传文件时间
     * @param url        wifi探针文件上传至服务器后返回的地址
     * @param mListener
     */
    void uploadWifiMAC(long uploadTime, String url, IUploadWifiMacCallbackListener mListener);

    /**
     * 上传节目当前下载状态（开始下载请求，下载成功再次请求，失败也请求）
     *
     * @param state
     * @param version
     * @param reason
     */
    void uploadProgramStatus(int state, String version, String reason, IUploadProgramStatusCallbackListener mListener);

    /**
     * 上传日志
     *
     * @param type      非空（crash:奔溃；run:运行；play：播放日志）
     * @param url       日志文件路径
     * @param mListener
     */
    void uploadLog(String type, String url, IUploadLogCallbackListener mListener);

    interface IUploadLogCallbackListener {
        void success();

        void error(Throwable t);
    }

    interface IUploadProgramStatusCallbackListener {
        void success();

        void error(Throwable t);
    }

    interface IUploadWifiMacCallbackListener {
        void success();

        void error(Throwable t);
    }

    interface IProgramReplyCallbackListener {
        void success();

        void error(Throwable t);
    }

    interface IProgramCallbackListener {
        void success(NewestProgramBean bean);

        void error(Throwable t);
    }

    /**
     * 节目播放完一轮上传
     *
     * @param jsonData
     * @param offlineTime 离线数据上传时间
     * @param mListener
     */
    void reportShow(String jsonData, String offlineTime, IReportShowCallbackListener mListener);

    interface IReportShowCallbackListener {
        void success(String offlineTime);

        void error(Throwable t);
    }

    interface ISettingSyncCallbackListener {
        void success();

        void error(Throwable t);
    }

    interface IUpgradeReplyCallbackListener {
        void success();

        void error(Throwable t);
    }

    interface INewestSettingReplyCallbackListener {
        void success();

        void error(Throwable t);
    }

    interface IUpgradeCallbackListener {
        void success(List<UpgradeBean> list);

        void error(Throwable t);
    }

    interface IReportCallbackListener {
        void success(DeviceInfoBean bean);

        void error(Throwable t);
    }

    interface ISettingCallbackListener {
        void success(ConfigBean bean);

        void error(Throwable t);
    }
}
